﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
//las que añado
using Librerias;
using System.Data;
using System.Collections;

namespace eCampusWeb
{
    public partial class Noticias : System.Web.UI.Page
    {
        ENNoticias androide;
        int visitante;
        String usuario = "";
        ListView lvNoticias = null;
        int modo; // indica si un usuario registrado ve solo not relacionadas con sus asignaturas(0), o todas las nots publicas(1)
        DataTable DatosFrescos=null;
        DataTable asignaturas = new DataTable(); 

        #region Page_Load
        /// <summary>
        /// Cargará la página 
        /// </summary>
        /// <param name="sender">Página Noticias</param>
        /// <param name="e">Evento Load</param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                try
                {
                    ///en ppio no muestro botones
                    btNuevaNoticia.Visible = false;
                    btTodasLasNoticias.Visible = false;
                    btDeMisAsignaturas.Visible = false;
                    //estadisticas
                    lbHasCreado.Visible = false;
                    lbNumeroMisNoticias.Visible = false;
                    lbNoticias.Visible = false;
                    lbHasVotado.Visible = false;
                    lbNumeroMisVotos.Visible = false;
                    lbVecesVotadas.Visible = false;
                    lbHasComentado.Visible = false;
                    lbNumeroComentarios.Visible = false;
                    lbNumeroComentariosHechos.Visible = false;
                  

                    ///instancio un androide que me haga el trabajo
                    androide = new ENNoticias();

                    ///Veo a ver quien accede a la página

                    visitante = Convert.ToInt32(Session["tipo"]);
                    
                    usuario = Session["correo"].ToString();
                    if (!usuario.Equals(""))
                    {
                        String s = Request.Url.ToString();
                        modo = Convert.ToInt32(Request.QueryString["modo"]);
                        

                        if (modo == 1) 
                        {
                            lvNoticias = lvNoticiasPublico;
                            btTodasLasNoticias.Visible = false;
                            btDeMisAsignaturas.Visible = true;
                            lbUltimasNoticias.Text = "Noticias de mi Red";    
                        }
                        else
                        {
                            lvNoticias = lvNoticiasPrivado;
                            modo = 0;
                            btDeMisAsignaturas.Visible = false;
                            btTodasLasNoticias.Visible = true;
                            lbUltimasNoticias.Text = " Noticias de mi Red y Públicas";
   
                        }
                        
                    }
                    else
                    {
                        cabeceraPrivada.Visible = false;
                        lvNoticias = lvNoticiasPublico;
                        btTodasLasNoticias.Visible = false;
                    }
                    

                    ///Cargo los datos en consecuencia
                    cargaDatos();
                }
                catch (Exception)
                {
                }
            }
        }

        #endregion      

        #region cargaDatos()
        /// <summary>
        /// Rellenará todo según el visitante que tengamos
        /// </summary>
        /// <param name="visitante"></param>
        protected void cargaDatos()
        {
            String sentencia = "";
            visitante = Convert.ToInt32(Session["tipo"]);
            androide = new ENNoticias();
            DatosFrescos = androide.dimeTodasNoticiasOrderByDataDESCConPuntos();
            if (visitante > 0)
            {
                asignaturas = new ENAsignatura().ConsultaAsignaturasPorCorreoUsuYTipoDataTable(usuario, visitante);    
            }
                
        DataView dv = null;
        ///miro que he de cargar
        switch (visitante)
        {
            ///Mostrará todas las noticias públicas
            #region invitado
            case -1:
                //Muestro Datos
                lbUltimasNoticias.Text = "Últimas Noticias en eCampus";
                        
                if (DatosFrescos.Rows.Count != 0)
                {
                    dv = new DataView(DatosFrescos);
                    dv.RowFilter = "notVisibilidad = 1";
                    lvNoticias.DataSource = dv;
                    lvNoticias.DataBind();
                }
                //Si no hubiera noticias lo hago saber
                else
                    {
                        lbAviso.Visible = true;
                        lbAviso.Text = "¡Oppss! No hay Noticias. Consulte más tarde.";
                    }
                break;
            #endregion

            ///Mostrará noticias del PROFESOR - > sólo de sus asignaturas
            #region profesor
            case 1:                  
                btNuevaNoticia.Visible = true;
                #region resumen estadístico profesor
                //Noticias Publicadas
                lbHasCreado.Visible = true;
                lbNumeroMisNoticias.Visible = true;
                lbNoticias.Visible = true;

                lbNumeroMisNoticias.Text = (androide.numeroNoticiasPorUsuario(usuario)).ToString();
                if (int.Parse(lbNumeroMisNoticias.Text) == 1)
                {
                    lbNoticias.Text = "Noticia";
                }

                //Votos Emitidos
                lbHasVotado.Visible=true;
                lbNumeroMisVotos.Visible=true;
                lbVecesVotadas.Visible = true;

                lbNumeroMisVotos.Text = (androide.numeroVotosPorUsuario(usuario)).ToString();
                if (int.Parse(lbNumeroMisVotos.Text) == 1)
                {
                    lbVecesVotadas.Text = "Noticia";
                }

                //Comentarios hechos en las noticias
                lbHasComentado.Visible = true;
                lbNumeroComentarios.Visible = true;
                lbNumeroComentariosHechos.Visible = true;

                lbNumeroComentarios.Text = (androide.numeroComentariosPorUsuario(usuario)).ToString();
                if (int.Parse(lbNumeroComentarios.Text) == 1)
                {
                    lbVecesVotadas.Text = "Noticia";
                }
                #endregion
                                         
                if (DatosFrescos.Rows.Count != 0)
                {
                    ///Me cargará tanto noticias públicas cómo privadas de mis asignaturas
                    dv = new DataView(DatosFrescos);
                    if (modo == 0)
                    {
                         sentencia = "notReceptor IN (" + lista(asignaturas) + ")";
                        dv.RowFilter = sentencia;
                    }
                    else
                    {
                        sentencia = "notReceptor IN (" + lista(asignaturas) + ") or notVisibilidad = 1";
                        dv.RowFilter = sentencia;
                    }
                            
                    lvNoticias.DataSource = dv;
                    lvNoticias.DataBind();
                }
                //Si no hay datos lo informo
                else
                    {
                        lbAviso.Visible = true;
                        lbAviso.Text = "¡Oppss! No hay Noticias. Consulte más tarde.";
                    }
                    break;
            #endregion

            ///Mostrará noticias del ALUMNO - > sólo de sus asignaturas
            #region alumno
            case 2:
                    //Escondo botones
                    btNuevaNoticia.Visible = false;
                   
                    #region resumen estadístico alumno
                    
                    //Votos Emitidos
                    lbHasVotado.Visible = true;
                    lbNumeroMisVotos.Visible = true;
                    lbVecesVotadas.Visible = true;

                    lbNumeroMisVotos.Text = (androide.numeroVotosPorUsuario(usuario)).ToString();
                    if (int.Parse(lbNumeroMisVotos.Text) == 1)
                    {
                        lbVecesVotadas.Text = "Noticia";
                    }

                    //Comentarios hechos en las noticias
                    lbHasComentado.Visible = true;
                    lbNumeroComentarios.Visible = true;
                    lbNumeroComentariosHechos.Visible = true;

                    lbNumeroComentarios.Text = (androide.numeroComentariosPorUsuario(usuario)).ToString();
                    if (int.Parse(lbNumeroComentarios.Text) == 1)
                    {
                        lbVecesVotadas.Text = "Noticia";
                    }
                    #endregion     
                       
                    asignaturas = new ENAsignatura().ConsultaAsignaturasPorCorreoUsuYTipoDataTable(usuario,visitante);
 
                    if (DatosFrescos.Rows.Count != 0)
                    {
                        ///Me cargará tanto noticias públicas cómo privadas de mis asignaturas
                        dv = new DataView(DatosFrescos);
                        if (modo == 0)
                        {
                            dv.RowFilter = "notReceptor IN (" + lista(asignaturas) + ")";
                        }
                        else
                        {
                            dv.RowFilter = "notReceptor IN (" + lista(asignaturas) + ") or notVisibilidad = 1";
                        }

                        lvNoticias.DataSource = dv;
                        lvNoticias.DataBind();
                    }
                    //Si no hubiere así lo informo
                    else
                    {
                        lbAviso.Visible = true;
                        lbAviso.Text = "¡Oppss! No hay Noticias. Consulte más tarde.";
                    }
                    break;
            #endregion

            ///Cualquier otro caso
            #region cualquierOtroCaso
            default:
                    //Escondo botones
                    btNuevaNoticia.Visible = false;

                    //Muestro Datos
                    lbUltimasNoticias.Text = "Últimas Noticias en eCampus";
                    DatosFrescos = androide.dimeTodasNoticiasPublicasWeb();
                    if (DatosFrescos.Rows.Count != 0)
                    {
                        lvNoticias.DataSource = DatosFrescos;
                        lvNoticias.DataBind();
                    }
                    //Si no hubiera noticias lo hago saber
                    else
                    {
                        lbAviso.Visible = true;
                        lbAviso.Text = "¡Oppss! No hay Noticias. Consulte más tarde.";
                    }
                    break;
            #endregion
        }
            
        }
        #endregion



     



        public String lista(DataTable asigs)
        {
            String sal = "";

            if (asigs.Rows.Count > 0) sal += "'"+ asigs.Rows[0]["asiCodigo"].ToString() +"'";
            for (int i = 1; i < asigs.Rows.Count; i++)
            {
                sal += ",'" + asigs.Rows[i]["asiCodigo"].ToString().Trim() + "'";
            }
            return sal;
        }
        #region votar comentarios
        public void MasUno(object sender, EventArgs e)
        {
            try
            {
                string id = ((ImageButton)sender).CommandArgument;
                new Librerias.EN.ENPuntos().MasUno("N" + id, Session["correo"].ToString());

                
                Response.Redirect(Request.Url.PathAndQuery);
            }
            catch (Exception)
            {
                lbAviso.Text = "No puedes votar dos veces el mismo comentario. ";
            }
        }

        public void MenosUno(object sender, EventArgs e)
        {
            try
            {
                string id = ((ImageButton)sender).CommandArgument;

                new Librerias.EN.ENPuntos().MenosUno("N" + id, Session["correo"].ToString());

                Response.Redirect(Request.Url.PathAndQuery);

            }
            catch (Exception)
            {
                lbAviso.Text = "No puedes votar dos veces el mismo comentario. ";
            }
        }

        #endregion

 

        #region eventos
        protected void lvNoticias_Suma(object sender, EventArgs e)
        {
            ImageButton a = (ImageButton)sender;

            //Aqui tendré el id de la noticia
            //lbUltimasNoticias.Text = a.CommandArgument;

            a.Enabled = false;
        }

        protected void btNoticiaCrear_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/NoticiaCrear.aspx");
        }
        #endregion




        protected void btDeMisAsignaturas_Click1(object sender, EventArgs e)
        {
            Response.Redirect("~/Noticias.aspx?modo=0");
        }

        protected void btTodasLasNoticias_Click1(object sender, EventArgs e)
        {
            Response.Redirect("~/Noticias.aspx?modo=1");
        }

        
       
    }
}